from heapq import heapify, heappop, heappush

n, k = map(int, input().split())
a = list(map(int, input().split()))

# 使用元组存储(值, 索引)，并建立堆
heap = [(a[i], i) for i in range(n)]
heapify(heap)

# 记录当前元素的左右邻居,左右端点为 -1, n
left = [i - 1 for i in range(n)]
right = [i + 1 for i in range(n)]

# 标记元素是否已经被删除
vist=[False]*n

while k>0:

    cur,idx=heappop(heap)
    # 堆中的值和a中的不一致，说明已经过时，加入新的元素
    if a[idx]!=cur:
        heappush(heap,(a[idx],idx))
        continue

    # 更新a中的左右值
    # 删除的是第一个元素
    if left[idx]==-1:
        a[right[idx]] += cur
        # 更新当前元素的左端点，表示其是新的头部
        left[right[idx]] = -1
    # 删除的是最后一个元素
    elif right[idx]==n:
        a[left[idx]] += cur
        right[left[idx]] = n
    else:
        a[left[idx]] += cur
        a[right[idx]] +=cur
        # 更新左侧元素的右索引为当前元素的右索引
        right[left[idx]] = right[idx]
        left[right[idx]] = left[idx]
    vist[idx] = True
    k-=1

for i in range(n):
    if not vist[i]:
        print(a[i],end=" ")

